package Aleehot100;

/**
 * ClassName: c067
 * Package: Aleehot100
 * Description:153. 寻找旋转排序数组中的最小值
 *
 * @Author BCXJ
 * @Create 2025/8/15 22:04
 * @Version 1.0
 * @Since 1.0
 */
public class c067 {
    public static void main(String[] args) {
        int[] arr = {2, 1};
        System.out.println(findMin(arr));
        System.out.println(findMin2(arr));
    }


    // 可以画画图 理解一下
    public static int findMin(int[] nums) {
        int l = 0, r = nums.length - 1, mid = 0;

        while(l < r) {
            mid = l + ((r - l) >> 1);
            // 右半边 无序，说明最小边界一定在右半边
            if(nums[mid] > nums[r]) {
                l = mid + 1;
            }
            // 左半边有序 或者 无序,右半边 无序的
            else {
                r = mid;
            }
        }
        return nums[l];
    }

    public static int findMin2(int[] nums) {
        int left = 0, right = nums.length - 1;

        while (left < right) {
            int mid = left + (right - left) / 2; // 避免溢出

            if (nums[mid] > nums[right]) {
                // 说明最小值一定在 mid 右边
                left = mid + 1;
            } else {
                // 说明最小值在 mid 或 mid 左边
                right = mid;
            }
        }

        return nums[left]; // left == right 时就是最小值
    }
}
